﻿package _7_Text;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DateFormatter;
import javax.swing.text.MaskFormatter;
import javax.swing.text.PlainDocument;
/**
 * 2011-6-6 13:16:50
 * @author Administrator
 * 演示各种文本框的使用
 */
public class TJTextField {
    JFrame frame;
    Container contentPane;
    JTextField nameField;
    JPasswordField passwordField;
    JPanel textBorderPane,textPane;
    public TJTextField(){
        frame=new JFrame("文本框测试");
        contentPane=frame.getContentPane();
        textPane=new JPanel();
        textBorderPane=new JPanel();
        textPane.setLayout(new GridBagLayout());
        textBorderPane.setLayout(new BorderLayout());
        textBorderPane.setBorder(BorderFactory.createTitledBorder("用户登录"));
        textPane.setBorder(BorderFactory.createEmptyBorder(20, 50, 20, 50));
        textBorderPane.add(textPane);
        contentPane.add(textBorderPane);
        setTextField(textPane);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    public void setTextField(JPanel pan){
        JLabel label;
        nameField=new JTextField(new MyDocument(10), "", 10);
        label=new JLabel("用户帐号:");
        add(pan, label, 0, 0, 1, 1, 0, 0);
        add(pan, nameField, 1, 0, 1, 1, 1, 0);
        passwordField=new JPasswordField(new MyDocument(10),"",10);
        passwordField.setEchoChar('*');
        label=new JLabel("用户密码:");
        add(pan, label, 0, 1, 1, 1, 0, 0);
        add(pan, passwordField, 1, 1, 1, 1, 1, 0);
        JFormattedTextField formatField=new JFormattedTextField(new DateFormatter(new SimpleDateFormat("yyyy-MMMM-dd")));
        MaskFormatter mask;
        formatField.setValue(new Date());
        label=new JLabel("生日");
        add(pan, label, 0, 2, 1, 1, 0, 0);
        add(pan, formatField, 1, 2, 1, 1, 1, 0);
        try {
            formatField = new JFormattedTextField(new MaskFormatter("U########"));
            label=new JLabel("学号:");
            add(pan, label, 0, 3, 1, 1, 0, 0);
            add(pan, formatField, 1, 3, 1, 1, 1, 0);
            mask=new MaskFormatter("UUUU-UUUU-UUUU");
            StringBuffer buffer=new StringBuffer();
            for(int i=0;i<26;i++){
                buffer.append((char)('A'+i));
            }
            mask.setValidCharacters(buffer.toString());
            mask.setPlaceholderCharacter('_');
            formatField = new JFormattedTextField(mask);
            label=new JLabel("序列号:");
            add(pan, label, 0, 4, 1, 1, 0, 0);
            add(pan, formatField, 1, 4, 1, 1, 1, 0);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        System.out.println(Character.isLetter('@'));
    }
    public void add(Container main,Container child,int gridx,int gridy,int gridWidth,int gridHeight,double weightx,double weighty){
        GridBagConstraints c=new GridBagConstraints();
        c.gridx=gridx;
        c.gridy=gridy;
        c.gridwidth=gridWidth;
        c.gridheight=gridHeight;
        c.weightx=weightx;
        c.weighty=weighty;
        c.fill=GridBagConstraints.BOTH;
        main.add(child,c);
    }
    public static void main(String args[]){
        new TJTextField();
    }
}
class MyDocument extends PlainDocument{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private int maxLength;
    public MyDocument(int max){
        maxLength=max;
    }
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if(str!=null && getLength()+str.length()>maxLength){
            Toolkit.getDefaultToolkit().beep();
            return;
        }
        super.insertString(offs, str, a);
    }
}
//            日期和时间模式
//            日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中，未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母，用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来，以免进行解释。"''" 表示单引号。所有其他字符均不解释；只是在格式化时将它们简单复制到输出字符串，或者在分析时与输入字符串进行匹配。
//
//            定义了以下模式字母（所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留）：
//
//            字母  日期或时间元素  表示  示例
//            G  Era 标志符  Text  AD
//            y  年  Year  1996; 96
//            M  年中的月份  Month  July; Jul; 07
//            w  年中的周数  Number  27
//            W  月份中的周数  Number  2
//            D  年中的天数  Number  189
//            d  月份中的天数  Number  10
//            F  月份中的星期  Number  2
//            E  星期中的天数  Text  Tuesday; Tue
//            a  Am/pm 标记  Text  PM
//            H  一天中的小时数（0-23）  Number  0
//            k  一天中的小时数（1-24）  Number  24
//            K  am/pm 中的小时数（0-11）  Number  0
//            h  am/pm 中的小时数（1-12）  Number  12
//            m  小时中的分钟数  Number  30
//            s  分钟中的秒数  Number  55
//            S  毫秒数  Number  978
//            z  时区  General time zone  Pacific Standard Time; PST; GMT-08:00
//            Z  时区  RFC 822 time zone  -0800
